package com.aaa.service.system.impl;

import com.aaa.dao.system.MenuDao;
import com.aaa.entity.sas.ViewTestResultSas;
import com.aaa.entity.system.Menu;
import com.aaa.dao.system.MenuDao;
import com.aaa.entity.PageSortEntity;
import com.aaa.service.system.MenuService;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;


import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 菜单权限表(Menu)表服务实现类
 *
 * @author makejava
 * @since 2022-08-29 15:57:16
 */
@Service("menuService")
public class MenuServiceImpl implements MenuService {
    @Resource
    @Autowired
    private MenuDao menuDao;

    /**
     * 通过ID查询单条数据
     *
     * @param menuId 主键
     * @return 实例对象
     */
    @Override
    public Menu queryById(Integer menuId) {
        return this.menuDao.queryById(menuId);
    }

    @Override
    public Map<String, Object> queryMenuByUsername(String username) {
        Map<String, Object> map = new HashMap();
        List<Menu> menuList = menuDao.queryMenuByUsername(username);
        List<Menu> firstMenuList = new ArrayList<>();
        List<Menu> secondMenuList = new ArrayList<>();
        //菜单分类
        for (Menu menu : menuList) {
            if (menu.getMenuType().equals("M")) {
                //一级菜单
                firstMenuList.add(menu);
            }
            if (menu.getMenuType().equals("C")) {
                //二级菜单
                secondMenuList.add(menu);
            }
        }
        map.put("firstMenuList", firstMenuList);
        map.put("secondMenuList", secondMenuList);
        return map;
    }


    /**
     * 新增数据
     *
     * @param menu 实例对象
     * @return 实例对象
     */
    @Override
    public Menu insert(Menu menu) {
        this.menuDao.insert(menu);
        List<Integer> integers = menuDao.selectAllRole();
        for (Integer integer : integers) {
            menuDao.insertRoleMenu(integer, menu.getMenuId());
        }
        return menu;
    }

    /**
     * 修改数据
     *
     * @param menu 实例对象
     * @return 实例对象
     */
    @Override
    public Menu update(Menu menu) {
        int update = this.menuDao.update(menu);
        menuDao.deleteRoleMenu(menu.getMenuId());
        List<Integer> integers = menuDao.selectAllRole();
        for (Integer integer : integers) {
            menuDao.insertRoleMenu(integer, menu.getMenuId());
        }
        return this.queryById(menu.getMenuId());
    }

    /**
     * 通过主键删除数据
     *
     * @param menuId 主键
     * @return 是否成功
     */
    @Override
    public boolean deleteById(Integer menuId) {
        return this.menuDao.deleteById(menuId) > 0;
    }

    /**
     * 通过用户名查找所有的菜单
     *
     * @param username
     * @return
     */
    @Override
    public Map<String, List<Menu>> findMenuByUsername(String username) {
        //通过用户名查询所有的菜单
        List<Menu> menus = menuDao.findMenuByUsername(username);
        //所有的一级菜单
        List<Menu> firstMenu = new ArrayList<>();
        //二级菜单
        List<Menu> secondMenu = new ArrayList<>();
        //根据类型区分一二级菜单
        for (Menu menu : menus) {
            if (menu.getMenuType().equals("M")) {
                firstMenu.add(menu);
            }
            if (menu.getMenuType().equals("C")) {
                secondMenu.add(menu);
            }
        }
        Map<String, List<Menu>> map = new HashMap();
        map.put("firstMenu", firstMenu);
        map.put("secondMenu", secondMenu);
        return map;
    }

    /**
     * 查询上级菜单的名字和ID
     *
     * @param menuId
     * @return
     */
    @Override
    public Menu findParentNameId(Integer menuId) {
        Menu parentNameId = menuDao.findParentNameId(menuId);
        if (parentNameId != null) {
            return parentNameId;
        } else {
            Menu menu = new Menu();
            menu.setMenuName("无上级目录");
            return menu;
        }

    }

    /**
     * 查询所有的菜单
     *
     * @param
     * @return
     */
    @Override
    public List<Menu> queryAllMenu() {
        List<Menu> menus = menuDao.queryAllMenu();
        return menus;
    }
}
